package com.lemon.core.base.util;

import com.lemon.core.base.exception.ValidateException;

import java.util.Collection;
import java.util.Map;
import java.util.Objects;

/**
 * 数据校验断言
 *
 * @author pan
 * @since 2016-10-12
 */
public class AssertUtils {

    private AssertUtils() {
    }

    /**
     * 条件为真
     *
     * @param condition 校验内容
     * @param message 返回信息
     */
    public static void isTrue(boolean condition, String message) {
        if (!condition) {
            throw new ValidateException(message);
        }
    }

    /**
     * 条件为假
     *
     * @param condition 校验内容
     * @param message 返回信息
     */
    public static void isFalse(boolean condition, String message) {
        isTrue(!condition, message);
    }

    /**
     * 对象相等
     *
     * @param val1 校验内容1
     * @param val2 校验内容2
     * @param message 返回信息
     */
    public static void isEquals(Object val1, Object val2, String message) {
        isTrue(Objects.equals(val1, val2), message);
    }

    /**
     * 对象不相等
     *
     * @param val1 校验内容1
     * @param val2 校验内容2
     * @param message 返回信息
     */
    public static void isNotEquals(Object val1, Object val2, String message) {
        isFalse(Objects.equals(val1, val2), message);
    }

    /**
     * 对象为空
     *
     * @param object 校验内容
     * @param message 返回信息
     */
    public static void isNull(Object object, String message) {
        if (Objects.nonNull(object)) {
            throw new ValidateException(message);
        }
    }

    /**
     * 对象不为空
     *
     * @param object 校验内容
     * @param message 返回信息
     */
    public static void notNull(Object object, String message) {
        if (Objects.isNull(object)) {
            throw new ValidateException(message);
        }
    }

    /**
     * 对象不为空值
     *
     * @param object 校验内容
     * @param message 返回信息
     */
    public static void notBlank(Object object, String message) {
        notNull(object, message);
        notBlank(object.toString(), message);
    }

    /**
     * 字符串为空
     *
     * @param str 校验内容
     * @param message 返回信息
     */
    public static void isBlank(String str, String message) {
        if (CheckUtils.isNotBlank(str)) {
            throw new ValidateException(message);
        }
    }

    /**
     * 字符串为空
     *
     * @param str 校验内容
     * @param message 返回信息
     */
    public static void notBlank(String str, String message) {
        if (CheckUtils.isBlank(str)) {
            throw new ValidateException(message);
        }
    }

    /**
     * 字符串不为空
     *
     * @param str 校验内容
     * @param message 返回信息
     */
    public static void notEmpty(String str, String message) {
        if (CheckUtils.isEmpty(str)) {
            throw new ValidateException(message);
        }
    }

    /**
     * 集合不为空
     *
     * @param collection 校验集合
     * @param message 返回信息
     */
    public static void notEmpty(Collection<?> collection, String message) {
        if (CheckUtils.isEmpty(collection)) {
            throw new ValidateException(message);
        }
    }

    /**
     * map不为空
     *
     * @param map 校验map
     * @param message 返回信息
     */
    public static void notEmpty(Map<?, ?> map, String message) {
        if (CheckUtils.isEmpty(map)) {
            throw new ValidateException(message);
        }
    }

    /**
     * 数组不为空
     *
     * @param array 校验数组
     * @param message 返回信息
     */
    public static void notEmpty(Object[] array, String message) {
        if (CheckUtils.isEmpty(array)) {
            throw new ValidateException(message);
        }
    }
}
